#pragma once

#include <vector>

class Layer
{
public:
    virtual ~Layer() = default;

    /**
     * @brief 2维张量的前向运算
     * @param[in] input: 输入数据
     * @param[out] output: 输出数据
     * @return void
     */
    virtual void forward(const std::vector<std::vector<double>> &input, std::vector<std::vector<double>> &output){};

    /**
     * @brief 2维张量的反向传播
     * @param[in] output_gradient 损失对输出的偏导
     * @return 损失对输入的偏导
     */
    virtual std::vector<std::vector<double>> backward(const std::vector<std::vector<double>> &output_gradient){ return std::vector<std::vector<double>>{};};
};
